|
|
Все эти замечания относятся к эмуляторам выпуска 2004 года. С тех пор было выпущено ещё несколько версий, одна из которых Alpha - есть на странице с игрушками - это несколько переконфигурированная девятка, другая (пока не опубликованная) - развитие основной ветки. Развитие, в основном, только в сторону отлова мелких ошибок, а также не очень существенных дополнений (вроде вынесенного в отдельный файл знакогенератора).
Дисплей:
- В семерке эмулируются все режимы семерки.
- В девятке эмулируются все режимы девятки, которые висят на C7xx.
- Apple-mode не эмулируются, но приводят к остановке VM.
- Регистры управления палитрой девятки влияют только на режим 256x256x4.
- Text64x32 всегда выводится пользовательским образом, может быть
изменен клавишей f11 и не зависит от программного переключателя.
- Мерцание в тексте идет в парилку и несет флаг.
- Знакогенератор девятки вроде правильный (хотя с документацией не
совпадает, зато совпадает с программами).
- Расширение знакогенератора семёрки (ниже 128-го символа) придумывал сам,
поэтому совпадает только с моими программами.
- Для работы достаточно VGA, поэтому не конфликтует с VESA-WINDOWS-BIOS
и прочим.
- Поддерживается бит яркости.
Флоп 140к:
- Подключен на $C3xx и $C0Bx.
- Имя файла-образа первого привода по умолчанию "test140.img", второго -
"test140_.img". Но в процессе работы можно выбирать другие имена.
- ROM у семерки и девятки отличается ! Это связано, вероятно,
с развитием PnP BIOS.
- Вращение диска происходит только при обращении к портам ввода/вывода
дисковода.
- Флаг ReadOnly на файле-образе передается как сигнал write protect
в виртуальный дисковод.
- Поскольку модель дисковода не очень точно соответствует реальному
устройству, может не всегда работать форматирование образа.
Но несколько форматтеров я проверил... Работают :)
Флоп 800к:
- Подключен на $C5xx и $C0Dx.
- Работает и запись и чтение, но не форматирование (т.е. не предусмотрена
возможность перезаписи поля адреса). Эмуляция этого дисковода сделана
менее точно, чем 140к, но в основной массе операционок работает.
- Имя файла-образа первого привода "test800.img", второго - "test800_.img",
но в процессе работы можно выбирать другие имена.
- Вообще говоря, все работает как положено и без сложностей,
за исключением того, что сигнал сбоя синхронизации жестко привязан
к определенным позициям на треке, а не хранится в nibble-файле
диска.
- Вращение происходит при обращении к портам ввода/вывода (на байт),
при чтении состояния (на ~ два бита) и при выполнении любых других команд
виртуальной машиной (порядка нескольких сотен команд на байт, и
только при включенном шпинделе).
- Флаг ReadOnly на файле-образе передается как сигнал write protect
в виртуальный дисковод.
Эмулятор при выключенном Num Lock эмулирует num pad Агата
через num pad AT следующим образом:
/--------------------\
| ф1 | ф2 | ф3 | - агатовская кнопка
| 7 | 8 | 9 | - ибмовская кнопка
| Home | ^ | PgUp |
|--------------------|
| ф4 | ф5 | ф6 |
| 4 | 5 | 6 |
| < | | > |
|--------------------|-----\
| ф7 | ф8 | ф9 | |
| 1 | 2 | 3 | E |
| End | V | PgDn | n |
|--------------------| t |
| ф0 | ф. | ф= e |
| Ins | Del | r |
====================
| ф0 | ф. | ф= | - Это та клавиатура, что над стрелками
|Insert| Home |PageUp|
|--------------------|
| F1 | F2 | F3 |
|Delete| End |PageDn|
\--------------------/
Управление виртуальной машиной:
F1 - help (справка по кнопкам)
F2 - reset (Упр-Сбр)
F3 - раскладка клавиатуры (qwerty/jcuken)
Смена имени образа:
Shift-F3 - s3d1 140к
Shift-F4 - s3d2 140к
Shift-F5 - s5d1 800к
Shift-F6 - s5d2 800к
F5 - монитор виртуальной машины
F6 - сброс состояния (не реализовано)
F7 - чтение состояния (не реализовано)
F8 - sound on/off
F9 - power (щелчок питанием:
7: $3f3,4 <- const, mem cfg <- 0, reset
9: $3f3,4 <- const, c085 <- const, reset
)
F10 - exit (выход из эмулятора)
F11 - смена цветового режима text64x32
F12 - вкл/выкл пультов. Некоторые проги (lode runner, например)
неадекватно реагируют на наличие пультов, поэтому по умолчанию
они выключены.
Scrool lock - этот программный переключатель действует аналогично
агатовскому РУС-РЕГ.
Кто не помнит: клавише РЕД соответствует ESC ;)
Вот клавиши ПВТ к огромному сожалению на ATшной клавиатуре нету :((
Ждать 0.25 секунды до автоповтора иногда долго. Да, IMHO, и 30 знаков
в секунду - это тоже мало. Я свою агатовскую клаву разгонял знаков до 40-50).
Оба эмулятора понимают в качестве дисков специальные
nibble - файлы. Фактически, это последовательности
байт, которые читаются/пишутся непосредственно в порт
дисковода при работе RWTS.
140:
- Формат используется в некоторых эмуляторах Apple][,
откуда и взят мной без изменений. Проблемм с ним не обнаружено.
- Прога для конверсии обычного образа в nibble
называется nibble14 и может гонять как образ в nibble,
так и назад. Но она не умеет создавать nibble, поэтому
ей для прямой конверсии нужен любой nibble с правильными
полями адреса и безразличным содержимым полей данных.
Для конверсии просто укажите в командной строке
имя исходного файла и файла назначения. По размеру исходного
будет определено направление конверсии.
800:
- Формат предложен мной. Проблемм пока с ним не было обнаружено,
но еще не вечер.
- Прога для конверсии обычного образа в nibble называется
nibble80 и может гонять пока только обычный образ
в nibble. При этом nibble-болванка не требуется.
В командной строке указывается имеющийся образ
и желаемое имя nibble. Третий необязательный параметр -
номер тома, который будет записываться в поля адреса nibble.
By default это 254, но, например, Sprite OS требует другие
номера.
- Некоторые проги также требуют всяких нестандартностей,
как то: совпадение номера тома с номером сектора, окончание
данных на $5a $fe вместо просто $a5 и иные извращения
(это, типа, защита от копирования. Я многие уже раскусил,
но пока не все - см. images\*.*).
Собственно на этот случай прикладываю исходник nibble80.pas
Пульты:
- Эмулируются через мышь. Но не совсем точно, поэтому движения могут
быть слишком резкими.
- Игрушка lode runner прикидывается зависшей, если ее запустить при
включенных пультах. Вероятно, это ее собственная проблемма.
Загрузка:
- По умолчанию семерка порывается грузится с 800к, а девятка - со 140к.
Если не нравится - быстро нажмите f2 [если не успели - f9 и сразу f2],
а затем вручную: C300G или C500G.
Баги:
- Эмулятор девятки изредка может подвиснуть. Причина пока не выяснена.
- В работе семерки ошибок не обнаружено.
- В работе девятки, вероятно, есть какие-то глюки, связанные с откликом
устройств. Но выловить пока не могу. См также images\, особенно
с ключевыми строками "!!!+++be94" - это оттуда.
Конкретно эту ошибку удается нейтрализовать, если после процедуры
анализа аппаратуры исправить ее результат в памяти VM, но это не
есть rules.
- Собственно, в настоящий момент мне известно три проявления
глюкавости эмулятора девятки,
которые повторяются на разных дисках и прогах из разных источников.
Условно я пока называю их так:
"!!!+++be94" - глюк в определении аппаратуры в kermit95, например.
"СЧМ9" - передача управления на незадействованные адреса. Пока подробно
не разбирался с ней.
"РАПИРА" - странное управление памятью - когда не надо переключать
банк памяти, рапира его переключает и имеет fault. Если переключение
обойти (sta ) - все работает.
- Вроде нашел причину завесок эмулятора девятки. Вероятно, это результат
выполнения фрагмета вроде sta c700,x\inx\jmp start. При этом эмулятор
начинает постоянно обращаться к vga-bios, что приводит к растяжению
виртуального времени и, как следствие, отсутствиям реакции на внешнее
раздражение. В связи с этим введен анализ клавиши Alt - при ее
удержании эмулятор перестает отрабатывать длительные опрерации с
физический аппаратурой, а также выполняет все команды без задержки.
Этим удобно пользоваться, чтобы быстро прокрутить какую нибудь заставку
игры, например.
- При работе Рапиры, которая была для семерки и шла вместе с ней еще
в, кажется, 1988 году, вылетает недопустимый опкод. Но если его пропустить,
все работает. Я предполагаю, что это ошибка в рапире, которая на реальном
железе просто обрабатывается как недокументированная команда (у 6502
море недокументированных команд - у меня есть их описания. Эмулятор
их не выполняет, т.к. в реальном софте я их практически не встречал).
Прочее:
- По сообщению Олега Воронова в реальной девятке отклик несуществующих
устройств неопределен. В то же время могу заверить, что в семерке
он был очень даже определен благодаря наличию 1к резюков, притягивающих
ШД к единицам, если какое либо устройство не тянуло бит к нулю. Однако
в эмуляторе девятки случайностей не предусмотрено... Хотя, в общем,
можно это сделать, если надо.
В общем, в результате, в эмуляторе семерки неиспользуемые адреса
в районе cXYY отзываются $FF, а в девятке: $CX.
- Прерывания от таймера есть, но они привязаны к виртуальному, а не
реальному времени - определенное количество прерываний на определенное
количество выполненных команд.
Благодарности:
- Сергей Морев: за присланную документацию на девятку
- Олег Воронов и Игорь Бончан: за образы дисков и консультации
- Стажер: за кривой, но все таки набранный эмулятор 6502
- Голов, Цикоза, Бадер,....: за исходные данные для железа и эмуляторов
[У вас точно ничего больше не осталось ? ;)))]
- И многих других за многое прочее ;)
Системное ПЗУ Агат7 немного исправлено: по resetу при проверке $3f3-4
не выполняется передача управления на [$3f2], а только вываливается
в system monitor. Ни на одной проге это пока не отразилось.
Исправление было сделано еще на натуральном железе,
а потом попало в файлы эмулятора.
Виртуальная машина, помимо основных регистров, содержит также следующие:
dr0 - точка остановки. При PC=dr0 программа снимается с выполнения и
запускается монитор ВМ.
dr1 - замедлялка. Значение 1 - максимальная скорость эмуляции, значение
$ffff - микрокалькулятор Б3-34 идет на обгон.
Для celeron366 рекомендуется dr1=$170
By default - максимальная скорость.
Попытка записать что нибудь по адресам c0fx или c050-c057 воспринимается
в девятке как ошибка и приводит к остановке вирутальной машины.
Естесно, что все фишки совместимости с Apple][ не эмулируются. Возьмите
любой эмулятор Apple][ и играйтеся - среди них есть очень хорошие.
Если вам кажется, что VM висит - нажмите F1. Правильно работающий
эмулятор независимо от проделок программы, исполняющейся в VM, нарисует
встроенный help по клавишам. Если не помогло - нажмите и удерживайте
alt.
В монитора виртуальной машины действуют следующие кнопки [регистр важен !]:
s - выполнить одну команду ВМ
g - GO !!!
j - установить dr0 на следующую за текущей команду, после чего GO !!!
(это для прохождения подпрограмм, например)
b - установка dr0 - break point
a - установка dr1 - скорость эмуляции
v - установка начального адреса дампа виртуальной памяти из 8 байт, который
выводится под регистрами зеленым цветом
e - изменение байта, на который указывает 'v'
Q - выход из эмулятора
r - reset (PC=word[$fffc])
R - щелчок питанием
u,d - сдвиг монитора по экрану (не надо задвигать его за границы экрана
- получите General Protect Fault)
m - записать некоторое значение по заданному адресу. Используется
для воздействия во время отладки на программные переключатели ($Cxxx)
h - справка по доступным кнопкам
W - сброс всей памяти на диск в файл dump.bin. Работает только в девятке
F - забивание всей памяти константой 'pots'. Работает только в девятке
p - вывод последних 16-и значений PC - работает в мониторе виртуальной машины.
Используется для поиска пути, по которому забрел виртуальный проц
в очередной глюк.
|
Владимир
deka sobaka itc точка tsu точка ru
deka пёсик ssmu точка ru
Зеркало сайта